package gg.zsw.dataframework.pubsub;

import gg.zsw.dataframework.decode.DecodeChain;

/**
 * 注意: 这只是个示例接口，一般来讲，直接用AbstractObserver，update方法照抄这个示例的实现就行了
 *
 * @author zhou.sw
 * @Date 2020/6/29 12:54
 */
public interface AbsObserverWithChain<Input, Output> extends AbstractObserver<Input> {


    /**
     * 数据要经过处理才能得到想要的类型。
     *
     * @param msg
     */
    @Override
    default void update(Input msg) {
        Output output = getDecodeChain().handle(msg);
        // Output是你程序直接使用的数据类型，
        // 观察者将更加聚焦数据的处理，而不是各种烦人的数据转换。
        handle(output);
    }


    DecodeChain<Input, Output> getDecodeChain();


    void handle(Output msg);


}
